﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.IO;   //导命名空间
using System.Runtime.Serialization.Formatters.Binary;   //二进制流格式化的命名空间

namespace whuc.PlaneGame
{
    public partial class ResultForm : Form
    {
        public ResultForm()
        {
            InitializeComponent();
        }

        private void ResultForm_Load(object sender, EventArgs e)
        {
            //怎么样保存结果，我们是把写在了一个文件里面
            /*
             * 数据应该放在数据库里面，但是我们还可以放到一个文件里面
             * 在这里，我们需要使用文件流来写入我们的数据   （输入流 InputStream，输出流OutputStream）
             */
            string filePath = Application.StartupPath + @"\game.dat";
            //首先判断一下，有没有这个文件
            if (File.Exists(filePath))
            {
                //如果有这个文件，那么，我就拿到这个文件，把这个文件转成对象
                using (FileStream fs=new FileStream(filePath,FileMode.OpenOrCreate,FileAccess.ReadWrite))
                {
                    //将这个文件流转换成对象 
                    BinaryFormatter bf = new BinaryFormatter();
                    object obj = bf.Deserialize(fs);
                    List<User> userList = obj as List<User>;   //委婉转换
                    //现在就得到一个集合，得到这个集合，我们还要判断一下，当前这个用户之前有没有玩过这个游戏
                    int index = userList.FindIndex(u => u.userNickName == DataUtil.userNickName);
                    if (index==-1)
                    {
                        //说明没有找到
                        //再把你当前的信息存放进去
                        userList.Add(new User(DataUtil.userNickName, DateTime.Now, DataUtil.Score));
                        //再把这个集合序列化以后放到文件里面去
                        bf.Serialize(fs, userList);
                    }
                    else
                    {
                        //说明找到了，找到以后去判断一下，它的之前的分数和现在的分数怎么样
                        if (userList[index].Score>DataUtil.Score)
                        {
                            //说明之前的分数高一些
                            this.label1.Text = userList[index].Score.ToString();
                        }
                        else
                        {
                             //说明这一次分数才是最高分
                            this.label1.Text = userList[index].Score.ToString();
                            userList[index].Score = DataUtil.Score;   //重新设置最高分
                            userList[index].playTime = DateTime.Now;  //换成当前时间
                            //再把这个集合序列化以后放到文件里面去
                            bf.Serialize(fs, userList);
                        }
                    }
                }
            }
            else
            {
                //要是这个文件不存在呢
                using (FileStream fs=new FileStream(filePath,FileMode.OpenOrCreate,FileAccess.ReadWrite))
                {
                    //我要我要直接创建一个集合
                    List<User> userList = new List<User>();
                    //再把你当前的信息存放进去
                    userList.Add(new User(DataUtil.userNickName, DateTime.Now, DataUtil.Score));
                    //再把这个集合序列化以后放到文件里面去
                    BinaryFormatter bf = new BinaryFormatter();
                    bf.Serialize(fs,userList);
                }
                this.label1.Text = DataUtil.Score.ToString();    //设置最高得分
            }
            this.label2.Text = DataUtil.Score.ToString();        //设置当前得分
        }


        //重写窗体关闭的方法
        protected override void OnFormClosed(FormClosedEventArgs e)
        {
            base.OnFormClosed(e);
            Application.Exit();
        }
    }
}
